package com.example.design.taskchain;

import org.springframework.util.ObjectUtils;

import java.util.List;

/**
 * 抽象处理者（Handler）角色：定义一个处理请求的接口，包含抽象处理方法和一个后继连接。
 */
public abstract class ApproverHandler {
    /**
     * 下一个处理者
     */
    private ApproverHandler approver;

    /**
     * 设置下一个处理者
     * @param approver
     */
    public void setApprover(ApproverHandler approver){
        this.approver = approver;
    }

    public ApproverHandler getApprover(){
        return this.approver;
    }

    /**
     * 第二种实现方式
     * @param students
     */
    public void processHandle(List<Student> students){
        students = processRequest(students);
        if(!ObjectUtils.isEmpty(approver)){
            approver.processHandle(students);
        }
    }

    /**
     * 处理方法
     */
    protected abstract List<Student> processRequest(List<Student> students);
}
